# -*- coding: utf-8 -*-
# @Time    : 2025/6/15 14:54
# @Author  : XinHuang
# @Email   : SA24231052@mail.ustc.edu.cn
# @File    : efficiency
# @Software: PyCharm
from functools import wraps


def memoize(func):
    """
    来自https://github.com/indently大佬
    装饰器缓存函数，用于缓存函数计算过的值，这个值将会被记录到cache变量中，
    如果函数已经计算过了，直接返回该值，如果没有计算过，则cache会新记录一个
    如果想用性能更好的，可以选择functools里面的lru_cache函数装饰器
    :param func:
    :return:
    """
    cache = {}

    @wraps(func)
    def wrapper(*args, **kwargs):
        key = str(args) + str(kwargs)
        if key not in cache:
            cache[key] = func(*args, **kwargs)
        return cache[key]

    return wrapper
